function output = SmoothFilter(input, lower_limit, upper_limit, window_size)

% 输入：
% input: 待处理数组
% lower_limit: 下限，超过下限的数字将被替换为下限
% upper_limit: 上限，超过上限的数字将被替换为上限

% 输出：
% output: 经过卡尔曼滤波处理后的数组

% 修正超出上下限的数字
input(input < lower_limit) = lower_limit;
input(input > upper_limit) = upper_limit;

% 将 NaN 替换为下限
input(isnan(input)) = lower_limit;

% 将 inf 替换为上限
input(isinf(input) & input > 0) = upper_limit;
input(isinf(input) & input < 0) = lower_limit;

% 生成高斯加权窗口
% gaussian_window = gausswin(window_size, gaussian_std);

% 对数据进行平滑
% output = smoothdata(input, window_size, 'gaussian');
% output = conv(input, gaussian_window, 'same') ./ sum(gaussian_window);
output = smoothdata(input, 'movmean',window_size);

x=[1:length(input)];


% 绘制图像
figure;
plot(x, input, 'g', x, output, 'k');
legend('Raw Data',  'Smoothed Data', 'Location', 'NorthWest');

end